import java.util.ArrayList;



public class Posicion {
	
	private ArrayList<Posicion> adjacentes;
	private String id;
	private ComidaPacman contenido;
	private int coordX;
	private int coordY;
	
	
	ArrayList<Posicion> getAdyacentes(){ return this.adjacentes;}
	public void setAdyacentes(ArrayList<Posicion> adya){ this.adjacentes=adya;}
	public Posicion(String id, int x , int y) {		
		this.id= id;
		this.coordX = x;
		this.coordY = y;
		this.adjacentes=new ArrayList<Posicion>();
		for ( int i = 0 ; i < 4 ; i++ ) {
			adjacentes.add( this );
		}
	}
	
	public void setearComida( ComidaPacman miComida ) {
		contenido = miComida;
	}
	
	public String queComidaTengo(){
		return this.contenido.serializar();
	}
	public String getid(){return this.id;}
	
	public void agregarAdjacente( Direccion dir , Posicion pos ) {
		adjacentes.set( dir.ordinal() , pos );
	}
	
	public Posicion adjacente( Direccion dir ) {
		int mov = dir.ordinal();
		Posicion nuevaPos = adjacentes.get( mov );
		return nuevaPos;
	}
	
	public int getX() {
		return this.coordX;
	}
	
	public int getY() {
		return this.coordY;
	}
	
	public void comerContenido() {
		contenido.serComido();
		contenido = new Ninguna();
	}
	
	public String serializar() {
		//TODO despues vemos...
		return new String("a");
	}
	
	
	private int sumaLugares(){
		int contador1 = 0;
		int contador2 = 0;
		Posicion aux;
		aux = this.adjacente( Direccion.Abajo );
		if((this.getX() != aux.getX() )||(this.getY() != aux.getY())){
			contador1++;
		}		aux = this.adjacente( Direccion.Arriba );
		if((this.getX() != aux.getX() )||(this.getY() != aux.getY())){
			contador1++;
		}
		aux = this.adjacente( Direccion.Derecha );
		if((this.getX() != aux.getX() )||(this.getY() != aux.getY())){
			contador2++;
		}
		aux = this.adjacente( Direccion.Izquierda );
		if((this.getX() != aux.getX() )||(this.getY() != aux.getY())){
			contador2++;
		}
		if((contador1>0  &&  contador2==0) || (contador1==0   && contador2>0)){
			return 1;
		}else{
			if(contador1>0   &&  contador2>0){
				return 2;
			}
		}
		return 0;
	}
	
	public boolean esBifurcacion(){
		int contador = sumaLugares();
		if ( contador == 2){
			return true;
		}		
		return false;
	}
	
	public boolean esCanal(){
		int contador = sumaLugares();
		if ( contador == 1){
			return true;
		}		
		return false;
	}
	
	public boolean Equals(Posicion pos){
		if ((this.coordX == pos.coordX ) && (this.coordY == pos.coordY)){
			return true;
		}
		return false;
	}
	
	public Direccion movimientoPosible(){
		Posicion aux;
		for (int k = 0 ; k < 4 ; k++ ) {
			aux = this.adjacente( Direccion.values()[k] );
			if((this.getX() != aux.getX() )||(this.getY() != aux.getY())){
				return Direccion.values()[k];
			}

		}
		return null;
	}
	

}
